﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using AdminCondominio.Dominio;
using System.Data.SqlClient;
using System.Data;

namespace AdminCondominio.Persistencia
{
    public class ResidenteDAO
    {
        //private String _CadenaConexion = @"Data Source=ALEX-PC;Initial Catalog=BdCondominio;Persist Security Info=True;User ID=admin;Password=12345";
        //private String _CadenaConexion =(@"Data Source=(local);Initial Catalog=BdCondominio;Integrated Security=True");

        private String _CadenaConexion = @"Data Source=localhost;Initial Catalog=BdCondominio;Persist Security Info=True;User ID=sa;Password=";
       // private String _CadenaConexion = @"Data Source=localhost;Initial Catalog=BdCondominio;Persist Security Info=True;User ID=sa;Password=";
        private SqlConnection _Conexion;
        public ResidenteDAO()
        {
            _Conexion = new SqlConnection(_CadenaConexion);

        }
        public Residente crear(Residente residenteACrear)
        {
         
                _Conexion.Open();
                String _Sentencia = @"INSERT INTO residente VALUES(@NuDocumento,@NoResidente,@FeNacimiento,@NoCorreo,@TxClave)";
                using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
                {
                    SqlParameter parametroNuDocumento = new SqlParameter("@NuDocumento", SqlDbType.NVarChar);
                    parametroNuDocumento.Value = residenteACrear.NuDocumento;
                    SqlParameter parametroNoResidente = new SqlParameter("@NoResidente", SqlDbType.NVarChar);
                    parametroNoResidente.Value = residenteACrear.NoResidente;
                    SqlParameter parametroFeNacimiento = new SqlParameter("@FeNacimiento", SqlDbType.DateTime);
                    parametroFeNacimiento.Value = residenteACrear.FeNacimiento;
                    SqlParameter parametroNoCorreo = new SqlParameter("@NoCorreo", SqlDbType.NVarChar);
                    parametroNoCorreo.Value = residenteACrear.NoCorreo;
                    SqlParameter parametroTxClave = new SqlParameter("@TxClave", SqlDbType.NVarChar);
                    parametroTxClave.Value = residenteACrear.TxClave;

                    _Comando.Parameters.Add(parametroNuDocumento);
                    _Comando.Parameters.Add(parametroNoResidente);
                    _Comando.Parameters.Add(parametroFeNacimiento);
                    _Comando.Parameters.Add(parametroNoCorreo);
                    _Comando.Parameters.Add(parametroTxClave);


                    _Comando.ExecuteNonQuery();

                }
                _Conexion.Close();
                Residente residenteCreado = this.obtener(residenteACrear.NuDocumento);
                return residenteCreado;
        
              
        }
        
        public Residente obtener(String nrodocumento){
            _Conexion.Open();
            String _Sentencia = @"select *from residente where NuDocumento=@nrodocumento";

            Residente residenteObtenido = null;
            using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
            {
                SqlParameter parameternrodocumento = new SqlParameter("@nrodocumento", SqlDbType.NVarChar);
                parameternrodocumento.Value = nrodocumento;
                _Comando.Parameters.Add(parameternrodocumento);
                SqlDataReader resultado = _Comando.ExecuteReader();
                if (resultado.HasRows)
                {
                    resultado.Read();
                    residenteObtenido = new Residente();
                    residenteObtenido.CoResidente = (int)resultado["CoResidente"];
                    residenteObtenido.NuDocumento = (String)resultado["NuDocumento"];
                    residenteObtenido.NoResidente = (String)resultado["NoResidente"];
                    residenteObtenido.FeNacimiento = (DateTime)resultado["FeNacimiento"];
                    residenteObtenido.NoCorreo = (String)resultado["NoCorreo"];
                    residenteObtenido.TxClave = (String)resultado["TxClave"];
                }
            }
             _Conexion.Close();

             return residenteObtenido;

        }

       
        public Residente modificar(Residente residenteAModificar) {
          
                 _Conexion.Open();
                 String _Sentencia = @"UPDATE residente SET NoResidente=@noresidente,FeNacimiento=@fenacimiento,NoCorreo=@nocorreo,TxClave=@txclave WHERE CoResidente=@coresidente";
                 using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
                 {
                     SqlParameter parametrocoresidente = new SqlParameter("@coresidente", SqlDbType.Int);
                     parametrocoresidente.Value = residenteAModificar.CoResidente;
                     SqlParameter parametronudocumento = new SqlParameter("@nudocumento", SqlDbType.NVarChar);
                     parametronudocumento.Value = residenteAModificar.NuDocumento;
                     SqlParameter parametronoresidente = new SqlParameter("@noresidente", SqlDbType.NVarChar);
                     parametronoresidente.Value = residenteAModificar.NoResidente;
                     SqlParameter parametrofenacimiento = new SqlParameter("@fenacimiento", SqlDbType.DateTime);
                     parametrofenacimiento.Value = residenteAModificar.FeNacimiento;
                     SqlParameter parametronocorreo = new SqlParameter("@nocorreo", SqlDbType.NVarChar);
                     parametronocorreo.Value = residenteAModificar.NoCorreo;
                     SqlParameter parametrotxclave = new SqlParameter("@txclave", SqlDbType.NVarChar);
                     parametrotxclave.Value = residenteAModificar.TxClave;

                     _Comando.Parameters.Add(parametrocoresidente);
                     _Comando.Parameters.Add(parametronudocumento);
                     _Comando.Parameters.Add(parametronoresidente);
                     _Comando.Parameters.Add(parametrofenacimiento);
                     _Comando.Parameters.Add(parametronocorreo);
                     _Comando.Parameters.Add(parametrotxclave);

                     _Comando.ExecuteNonQuery();
                 }
                 _Conexion.Close();
                 Residente residenteDev = this.obtener(residenteAModificar.NuDocumento);
                 return residenteDev;
           
        }

        public void eliminar(Residente residente) {
            _Conexion.Open();
            String _Sentencia = @"delete from residente where NuDocumento=@nudocumento";
            using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
            {
                SqlParameter parameternudocumento = new SqlParameter("@nudocumento", SqlDbType.NVarChar);
                parameternudocumento.Value = residente.NuDocumento;
                _Comando.Parameters.Add(parameternudocumento);
                _Comando.ExecuteNonQuery();
            }
            _Conexion.Close();

        }

        public  List<Residente> ListarResidente(String noresidente)
        {
            //_Conexion.Open();
            String _Sentencia = @"select * from residente where NoResidente like '%"+ noresidente +"%'";
           
            SqlCommand _Comando = new SqlCommand(_Sentencia,_Conexion);
            _Comando.Connection.Open();
            SqlDataReader resultado=_Comando.ExecuteReader();
            List<Residente> _LisResidente = new List<Residente>();

            while (resultado.Read())
            {
                Residente _Item = new Residente();
                _Item.CoResidente = resultado.IsDBNull(0) ? 0 : resultado.GetInt32(0);
                _Item.NuDocumento = resultado.IsDBNull(1) ? string.Empty : resultado.GetString(1);
                _Item.NoResidente = resultado.IsDBNull(2) ? string.Empty : resultado.GetString(2);
                _Item.FeNacimiento = resultado.IsDBNull(3) ? DateTime.Now: resultado.GetDateTime(3);
                _Item.NoCorreo = resultado.IsDBNull(4) ? string.Empty : resultado.GetString(4);
                _Item.TxClave = resultado.IsDBNull(5) ? string.Empty : resultado.GetString(5);
                _LisResidente.Add(_Item);
            }
          //  _Conexion.Close();
            _Comando.Connection.Close();

            return _LisResidente;
           
           
        }

        public Residente ObtenerResidenteConCorreoRepetido(string nudocumento, String correo)
        {
            String sentencia = "SELECT * FROM residente WHERE NoCorreo=@correo AND Nudocumento<>@nudocumento";
            _Conexion.Open();
            Residente residente = null;
            using (SqlCommand comando = new SqlCommand(sentencia, _Conexion))
            {
                SqlParameter parametercorreo = new SqlParameter("@correo", SqlDbType.NVarChar);
                parametercorreo.Value = correo;
                SqlParameter parameternudocumento = new SqlParameter("@nudocumento", SqlDbType.NVarChar);
                parameternudocumento.Value = nudocumento;
                comando.Parameters.Add(parametercorreo);
                comando.Parameters.Add(parameternudocumento);
                SqlDataReader resultado = comando.ExecuteReader();
                if (resultado.HasRows)
                {
                    resultado.Read();
                    residente = new Residente();
                    residente.CoResidente = (int)resultado["CoResidente"];
                    residente.NuDocumento = (String)resultado["NuDocumento"];
                    residente.NoResidente = (String)resultado["NoResidente"];
                    residente.FeNacimiento = (DateTime)resultado["FeNacimiento"];
                    residente.NoCorreo = (String)resultado["NoCorreo"];
                    residente.TxClave = (String)resultado["TxClave"];


                }
            }
            _Conexion.Close();
            return residente;
        }

        public Residente ObtenerResidenteConCorreoRepetidoXCodigo(int coresidente, String correo)
        {
            String sentencia = "SELECT * FROM residente WHERE NoCorreo=@correo AND CoResidente<>@coresidente";
            _Conexion.Open();
            Residente residente = null;
            using (SqlCommand comando = new SqlCommand(sentencia, _Conexion))
            {
                SqlParameter parametercorreo = new SqlParameter("@correo", SqlDbType.NVarChar);
                parametercorreo.Value = correo;
                SqlParameter parametercoresidente = new SqlParameter("@coresidente", SqlDbType.Int);
                parametercoresidente.Value = coresidente;
                comando.Parameters.Add(parametercorreo);
                comando.Parameters.Add(parametercoresidente);
                SqlDataReader resultado = comando.ExecuteReader();
                if (resultado.HasRows)
                {
                    resultado.Read();
                    residente = new Residente();
                    residente.CoResidente = (int)resultado["CoResidente"];
                    residente.NuDocumento = (String)resultado["NuDocumento"];
                    residente.NoResidente = (String)resultado["NoResidente"];
                    residente.FeNacimiento = (DateTime)resultado["FeNacimiento"];
                    residente.NoCorreo = (String)resultado["NoCorreo"];
                    residente.TxClave = (String)resultado["TxClave"];


                }
            }
            _Conexion.Close();
            return residente;
            
        }

        public Residente obtenerResidenteConDocumentoRepetido(int coresidente, String nudocumento)
        {
            String sentencia = "SELECT * FROM residente WHERE NuDocumento=@nudocumento AND CoResidente<>@coresidente";
            _Conexion.Open();
            Residente residente = null;
            using (SqlCommand comando = new SqlCommand(sentencia, _Conexion))
            {
                SqlParameter parameternudocumento = new SqlParameter("@nudocumento", SqlDbType.NVarChar);
                parameternudocumento.Value = nudocumento;
                SqlParameter parametercoresidente = new SqlParameter("@coresidente", SqlDbType.Int);
                parametercoresidente.Value = coresidente;
                comando.Parameters.Add(parameternudocumento);
                comando.Parameters.Add(parametercoresidente);
                SqlDataReader resultado = comando.ExecuteReader();
                if (resultado.HasRows)
                {
                    resultado.Read();
                    residente = new Residente();
                    residente.CoResidente = (int)resultado["CoResidente"];
                    residente.NuDocumento = (String)resultado["NuDocumento"];
                    residente.NoResidente = (String)resultado["NoResidente"];
                    residente.FeNacimiento = (DateTime)resultado["FeNacimiento"];
                    residente.NoCorreo = (String)resultado["NoCorreo"];
                    residente.TxClave = (String)resultado["TxClave"];


                }
            }
            _Conexion.Close();
            return residente;
        }

        public Residente obtenerX_Codigo(int codigo)
        {
            _Conexion.Open();
            String _Sentencia = @"select *from residente where CoResidente=@codigo";

            Residente residenteObtenido = null;
            using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
            {
                SqlParameter parametercodigo= new SqlParameter("@codigo", SqlDbType.Int);
                parametercodigo.Value = codigo;
                _Comando.Parameters.Add(parametercodigo);
                SqlDataReader resultado = _Comando.ExecuteReader();
                if (resultado.HasRows)
                {
                    resultado.Read();
                    residenteObtenido = new Residente();
                    residenteObtenido.CoResidente = (int)resultado["CoResidente"];
                    residenteObtenido.NuDocumento = (String)resultado["NuDocumento"];
                    residenteObtenido.NoResidente = (String)resultado["NoResidente"];
                    residenteObtenido.FeNacimiento = (DateTime)resultado["FeNacimiento"];
                    residenteObtenido.NoCorreo = (String)resultado["NoCorreo"];
                    residenteObtenido.TxClave = (String)resultado["TxClave"];
                }
            }
            _Conexion.Close();

            return residenteObtenido;

        }

    }
}